package com.dyz.LeetCodeforSwordFingerOffer;

/**
 * @author: daiyizheng
 * @date: 2021/7/7 20:57
 * @description:
 */
public class FindNthDigit44 {
    public static void main(String[] args) {
        int nthDigit = new FindNthDigit44().findNthDigit(15);
        System.out.println(nthDigit);

    }
    public int findNthDigit(int n) {
        /**
         * 一位数 1-9     起始位数 1   数量 9   长度 9
         * 二位数 10-99   起始位数 10  数量 90  长度 180
         * 三位数 100-999 起始位数 100 数量 900 长度 2700
         *
         * 起始位数是从 1开始，往后依次乘以 10
         * 数量 9*起始位置
         * 长度 数量*位数
         */
        if(n<=0){return 0;}
        long start = 1; //起始点
        long digits = 1; //位数
        long count = 9; //长度
        //1. 确定对应数字的位数 -》 digit
        while (n>count){
            n -= count;
            start *= 10;
            digits +=1;
            count = 9*start*digits;
        }
        //2. 确定n对应的数字 -> num
        long num = start + (n-1)/digits;
        //3. 确定n是num的哪个数
        char [] c = (""+num).toCharArray();
        int index =(int)((n-1)%digits);
        return c[index]-'0';
    }
}
